use std::collections::{HashMap, HashSet};
+use std::collections::hashmap::{Occupied, Vacant};
use std::fmt;
use semver;
// Record what list of features is active for this package.
{
let pkgid = parent.get_package_id().clone();
- let features = ctx.resolve.features.find_or_insert(pkgid,
- HashSet::new());
- features.extend(used_features.into_iter());
+ match ctx.resolve.features.entry(pkgid) {
+ Occupied(entry) => entry.into_mut(),
+ Vacant(entry) => entry.set(HashSet::new()),
+ }.extend(used_features.into_iter());
}
// Recursively resolve all dependencies
for &dep in deps.iter() {
- if !ctx.resolved.find_or_insert(parent.get_package_id().clone(),
- HashSet::new())
- .insert(dep.get_name().to_string()) {
+ if !match ctx.resolved.entry(parent.get_package_id().clone()) {
+ Occupied(entry) => entry.into_mut(),
+ Vacant(entry) => entry.set(HashSet::new()),
+ }.insert(dep.get_name().to_string()) {
continue
}
use std::collections::{HashMap, HashSet};
+use std::collections::hashmap::{Occupied, Vacant};
use std::str;
use core::{SourceMap, Package, PackageId, PackageSet, Resolve, Target};
let key = (pkg.get_package_id(), target.get_name());
let req = if target.get_profile().is_plugin() {PlatformPlugin} else {req};
- self.requirements.insert_or_update_with(key, req, |_, v| {
- *v = v.combine(req);
- });
+ match self.requirements.entry(key) {
+ Occupied(mut entry) => { *entry.get_mut() = entry.get().combine(req); }
+ Vacant(entry) => { entry.set(req); }
+ };
for &(pkg, dep) in self.dep_targets(pkg).iter() {
self.build_requirements(pkg, dep, req, visiting);
+use std::collections::hashmap::{Occupied, Vacant};
use std::hash::{Hash, Hasher};
use std::hash::sip::SipHasher;
use std::io::{fs, File, UserRWX, BufferedReader};
cx.compilation.binaries.push(dst.clone());
} else if target.is_lib() {
let pkgid = pkg.get_package_id().clone();
- cx.compilation.libraries.find_or_insert(pkgid, Vec::new())
- .push(root.join(filename));
+ match cx.compilation.libraries.entry(pkgid) {
+ Occupied(entry) => entry.into_mut(),
+ Vacant(entry) => entry.set(Vec::new()),
+ }.push(root.join(filename));
}
}
}
use std::collections::HashMap;
+use std::collections::hashmap::{Occupied, Vacant};
use term::color::YELLOW;
use core::{Package, PackageId, Resolve};
// Record the freshness state of this package as dirty if any job is
// dirty or fresh otherwise
let fresh = jobs.iter().fold(Fresh, |f1, &(_, f2)| f1.combine(f2));
- let prev = self.state.find_or_insert(pkg.get_package_id(), fresh);
- *prev = prev.combine(fresh);
+ match self.state.entry(pkg.get_package_id()) {
+ Occupied(mut entry) => { *entry.get_mut() = entry.get().combine(fresh); }
+ Vacant(entry) => { entry.set(fresh); }
+ };
// Add the package to the dependency graph
self.queue.enqueue(&self.resolve, Fresh,
use std::{fmt, os, mem};
use std::io::fs::{PathExtensions, File};
use std::collections::HashMap;
+use std::collections::hashmap::{Occupied, Vacant};
use std::string;
use serialize::{Encodable,Encoder};
(&Table(ref mut old), Table(ref mut new)) => {
let new = mem::replace(new, HashMap::new());
for (key, value) in new.into_iter() {
- let mut err = Ok(());
- old.find_with_or_insert_with(key, value,
- |_, old, new| err = old.merge(new),
- |_, new| new);
- try!(err);
+ match old.entry(key) {
+ Occupied(mut entry) => { try!(entry.get_mut().merge(value)); }
+ Vacant(entry) => { entry.set(value); }
+ };
}
}
(expected, found) => {
//! it to figure out when a dependency should be built.
use std::collections::{HashMap, HashSet};
+use std::collections::hashmap::{Occupied, Vacant};
use std::hash::Hash;
pub struct DependencyQueue<K, V> {
let mut my_dependencies = HashSet::new();
for dep in key.dependencies(cx).into_iter() {
assert!(my_dependencies.insert(dep.clone()));
- let rev = self.reverse_dep_map.find_or_insert(dep, HashSet::new());
+ let rev = match self.reverse_dep_map.entry(dep) {
+ Occupied(entry) => entry.into_mut(),
+ Vacant(entry) => entry.set(HashSet::new()),
+ };
assert!(rev.insert(key.clone()));
}
assert!(self.dep_map.insert(key, (my_dependencies, value)));
use std::fmt;
use std::hash::Hash;
use std::collections::{HashMap, HashSet};
-use std::collections::hashmap::{Keys, SetItems};
+use std::collections::hashmap::{Keys, Occupied, SetItems, Vacant};
pub struct Graph<N> {
nodes: HashMap<N, HashSet<N>>
}
pub fn link(&mut self, node: N, child: N) {
- self.nodes
- .find_or_insert_with(node, |_| HashSet::new())
- .insert(child);
+ match self.nodes.entry(node) {
+ Occupied(entry) => entry.into_mut(),
+ Vacant(entry) => entry.set(HashSet::new()),
+ }.insert(child);
}
pub fn get_nodes(&self) -> &HashMap<N, HashSet<N>> {